package cn.itcast.item.service.impl;

import cn.itcast.hmall.dto.common.PageDTO;
import cn.itcast.hmall.dto.item.SearchItemDTO;
import cn.itcast.hmall.pojo.item.Item;

import cn.itcast.item.mapper.ItemMapper;

import cn.itcast.item.service.ItemService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.Map;

/**
 * <p>
 * 商品表 服务实现类
 * </p>
 *
 * @author 哈纳桑
 * @since 2024-07-09
 */
@Service
public class ItemServiceImpl extends ServiceImpl<ItemMapper, Item> implements ItemService {

    /**
     * 分页查询商品
     *
     * @param searchItemDTO 请求参数
     * @return
     */
    @Override
    public PageDTO<Item> search(Map searchItemDTO) {
        // 构建分页条件
        //TODO: 逻辑删除键 status= 1-下架 2-下架 3-删除
        LambdaQueryWrapper<Item> wrapper = new LambdaQueryWrapper<Item>()
                .like(!StringUtils.isEmpty(searchItemDTO.get("name")), Item::getName, searchItemDTO.get("name"))
                .like(!StringUtils.isEmpty(searchItemDTO.get("category")), Item::getCategory, searchItemDTO.get("category"))
                .like(!StringUtils.isEmpty(searchItemDTO.get("brand")), Item::getBrand, searchItemDTO.get("brand"))
                .between(!StringUtils.isEmpty(searchItemDTO.get("beginDate")) && !StringUtils.isEmpty(searchItemDTO.get("endDate")),
                        Item::getCreateTime, searchItemDTO.get("beginDate"), searchItemDTO.get("endDate"));


        // 分页查询
//        Page<Item> page = page(new Page<Item>(searchItemDTO.getPage(), searchItemDTO.getSize()), wrapper);
        Page<Item> page = page(new Page<Item>(Long.parseLong(searchItemDTO.get("page").toString()), Long.parseLong(searchItemDTO.get("size").toString())), wrapper);

        // 封装返回结果
        PageDTO<Item> pageDTO = new PageDTO<>();
        pageDTO.setList(page.getRecords());
        pageDTO.setTotal(page.getTotal());

        return pageDTO;
    }

    @Override
    public void updateStock(Long itemId, Integer num) {
        Item item = getById(itemId);
        item.setStock(item.getStock() - num);
        updateById(item);
    }


}
